package server

import (
	"encoding/json"
	"fmt"
	"github.com/guaidashu/go_helper"
	"sub-app-server/config"
	"sub-app-server/libs"
)

type AppInfo struct {
	AndroidId    string `json:"android_id"`
	Version      string `json:"version"`
	SdkVersion   string `json:"sdk_version"`
	DeviceName   string `json:"device_name"`
	OperatorName string `json:"operator_name"`
	OperatorCode string `json:"operator_code"`
	PackageName  string `json:"package_name"`
	Network      string `json:"network"`
	MarkId       string `json:"mark_id"`
	TimeZone     string `json:"timezone"`
	Lang         string `json:"lang"`
}

type ResponseData struct {
	Data interface{} `json:"data"`
	Msg  string      `json:"msg"`
	Code int         `json:"code"`
}

func (s *AppInfo) String() string {

	data, _ := json.Marshal(s)

	return string(data)
}

type BrowerScript struct {
	app   AppInfo
	proxy string
}

func NewBrowerScript(app AppInfo, proxy string) *BrowerScript {

	return &BrowerScript{
		app,
		proxy,
	}
}

func (s *BrowerScript) Run() (int, error) {

	var (
		err      error
		response ResponseData
	)

	// script := config.S.Get(s.app.OperatorCode)
	operatorCode := s.app.OperatorCode

	// 语言
	lang := s.app.Lang

	// 时区
	timezone := s.app.TimeZone

	// 代理
	proxy := s.proxy

	// 设备id
	android := s.app.AndroidId

	// other
	other := s.app.String()

	// if script != nil {
	// 	exe := script.Exe
	// 	// 脚本名字
	// 	name := script.Name
	//
	// 	// 语言
	// 	lang := s.app.Lang
	//
	// 	// 时区
	// 	timezone := s.app.TimeZone
	//
	// 	// 代理
	// 	proxy := s.proxy
	//
	// 	// 设备id
	// 	android := s.app.AndroidId
	//
	// 	// other
	// 	other := s.app.String()
	//
	// 	command := exec.Command(exe, name, lang, timezone, proxy, android, other)
	// 	command.Dir = script.Dir
	//
	// 	out, err := command.CombinedOutput()
	//
	// 	return string(out), err
	// }
	// return "not found script: " + s.app.OperatorCode, nil

	// 加锁，保证id的唯一和 有效性
	config.Lock.Mux.Lock()

	id := config.Lock.Count // 此id用来 进行标识这个请求

	config.Lock.Count++

	config.Lock.Mux.Unlock()

	body := "operator_code=%v&lang=%v&timezone=%v&proxy=%v&android_id=%v&other=%v&unlock_id=%v"

	body = fmt.Sprintf(body, operatorCode, lang, timezone, proxy, android, other, id)

	request := go_helper.Post("http://127.0.0.1:8088/task/start")

	request.Body(body)

	request.Header("Content-Type", "application/x-www-form-urlencoded")

	if err = request.ToJSON(&response); err != nil {
		err = libs.NewReportError(err)
	}

	// 进行阻塞，一直等待接口被调用然后释放channel ，这个操作应该放在调用此函数处

	return id, err
}

// 4915255437642
